<!DOCTYPE HTML>
<html lang="en">
<head>
  <meta charset="utf8">
  <title>Test for getRepeatId()</title>
  <script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
  <script type="application/javascript;version=1.8" src="head.js"></script>
  <!-- Any copyright is dedicated to the Public Domain.
     - http://creativecommons.org/publicdomain/zero/1.0/ -->
</head>
<body>
<p>Test for render perf</p>
<div id="output"></div>

<script type="text/javascript;version=1.8">
const testPackets = [];
const numMessages = 1000;
for (let id = 0; id < numMessages; id++) {
  let message = "Odd text";
  if (id % 2 === 0) {
    message = "Even text";
  }
  testPackets.push({
    "from": "server1.conn4.child1/consoleActor2",
    "type": "consoleAPICall",
    "message": {
      "arguments": [
        "foobar",
        message,
        id
      ],
      "columnNumber": 1,
      "counter": null,
      "filename": "file:///test.html",
      "functionName": "",
      "groupName": "",
      "level": "log",
      "lineNumber": 1,
      "private": false,
      "styles": [],
      "timeStamp": 1455064271115 + id,
      "timer": null,
      "workerType": "none",
      "category": "webdev"
    }
  });
}

function timeit(cb) {
  // Return a Promise that resolves the number of seconds cb takes.
  return new Promise(resolve => {
    let start = performance.now();
    cb();
    let elapsed = performance.now() - start;
    resolve(elapsed / 1000);
  });
}

window.onload = Task.async(function* () {
  const { configureStore } = browserRequire("devtools/client/webconsole/new-console-output/store");
  const { filterTextSet, filtersClear } = browserRequire("devtools/client/webconsole/new-console-output/actions/index");
  const NewConsoleOutputWrapper = browserRequire("devtools/client/webconsole/new-console-output/new-console-output-wrapper");
  const wrapper = new NewConsoleOutputWrapper(document.querySelector("#output"), {});

  const store = configureStore();

  let time = yield timeit(() => {
    testPackets.forEach((message) => {
      wrapper.dispatchMessageAdd(message);
    });
  });
  info("took " + time + " seconds to render messages");

  time = yield timeit(() => {
    store.dispatch(filterTextSet("Odd text"));
  });
  info("took " + time + " seconds to search filter half the messages");

  time = yield timeit(() => {
    store.dispatch(filtersClear());
  });
  info("took " + time + " seconds to clear the filter");

  ok(true, "Yay, it didn't time out!");

  SimpleTest.finish();
});
</script>
</body>
</html>
